package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import vista.VistaFinalizarJuego;
import vista.VistaMenuPrincipal;
import vista.VistaOrdenDeArresto;
import vista.VistaSospechosos;
import modelo.Juego;
import modelo.policia.Policia;
import modelo.ladron.Ladron;
import modelo.ladron.caracteristicas.*;


public class ControlOrdenDeArresto implements ActionListener{
	
	private VistaOrdenDeArresto vista;
	private Juego juego;
	private Policia policia;
	private static ControlOrdenDeArresto instancia = null;
	
	private ControlOrdenDeArresto(){
		this.vista = VistaOrdenDeArresto.obtenerInstancia();
		actionListener(this);
	}
	public void setearJuego(Juego juego){
		this.juego =juego;
		this.policia=juego.getPolicia();
	}
	private void actionListener(ActionListener escuchador){
		vista.getBotonEmitir().addActionListener(escuchador);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
	    if(e.getSource()==vista.getBotonEmitir()){
	       	policia.modificarOrdenDeArresto().setearCabello((Cabello) vista.getCabello().getSelectedItem());
	       	policia.modificarOrdenDeArresto().setearHobby((Hobby)vista.getHobby().getSelectedItem());
	       	policia.modificarOrdenDeArresto().setearSexo((Sexo)vista.getSexo().getSelectedItem());
	       	policia.modificarOrdenDeArresto().setearSenia((Senia)vista.getSenia().getSelectedItem());
	       	policia.modificarOrdenDeArresto().setearVehiculo((Vehiculo)vista.getVehiculo().getSelectedItem());
	       	List<Ladron> sospechosos = policia.emitirOrdenDeArresto();
	       	new ControlVistaSospechosos(new VistaSospechosos(sospechosos));
		    VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarSuperiorDerecho("vistaSospechosos");
	    }
	    if (juego.casoFinalizado()){	    	
	    	VistaFinalizarJuego vistaGanarJuego= new VistaFinalizarJuego(juego);
	    	VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarSuperiorDerecho("vistaFinalizarJuego");
		    VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaImagenLadron");
	    	new ControlFinalizarJuego(vistaGanarJuego,juego);	    	
	    }
	    VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaInfoCiudad");;
	}
	private synchronized static void crearInstancia(){
		if (instancia == null ) {
			instancia = new ControlOrdenDeArresto();
		}
	}
	public static ControlOrdenDeArresto obtenerInstancia(){
		if (instancia == null){
			crearInstancia();
		}
		return instancia;
	}
	public static void borrarInstancia(){
		instancia = null;
	}
}
